package bszt.redbook;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Code03 {

    /**
     * 问题描述
     * K小姐是一位热爱园艺的设计师。她最近设计了一个树木园，里面有n棵树，每棵树都被涂上了红色或黑色。这些树通过特殊的地下根系连接，形成了一个树状结构
     * 然而，K小姐发现红色树木可能会影响黑色树木的生长。她想知道，如果移除一棵红色树木（包括与它相连的所有根系），剩余的黑色树木最多能形成多大的连续群落
     * 请你帮助K小姐计算，在移除一棵红色树木后，剩余连通部分中黑色树木数量的最大值是多少
     * <p></p>
     * 输入格式
     * 第一行输入一个整数n，表示树木的数量
     * 第二行输入一个长度为n的字符串，其中s_i表示第i棵树的颜色。'B'表示黑色，'R'表示红色。保证字符串中至少有一个'R'
     * 接下来n-1行，每行输入两个整数u_i和v_i，表示第i条根系连接了第u_i棵树和第v_i棵树
     * <p></p>
     * 输出格式
     * 输出一个整数，表示移除一棵红色树木后，剩余连通部分中黑色树木数量的最大值
     */

    static List<List<Integer>> tree;
    static String colors;
    static int totalBlack;
    static int maxBlack;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        colors = br.readLine();

        // 初始化树结构
        tree = new ArrayList<>(n + 1);
        for (int i = 0; i <= n; i++) {
            tree.add(new ArrayList<>());
        }

        // 构建树
        for (int i = 0; i < n - 1; i++) {
            String[] edge = br.readLine().split(" ");
            int u = Integer.parseInt(edge[0]);
            int v = Integer.parseInt(edge[1]);
            tree.get(u).add(v);
            tree.get(v).add(u);
        }

        // 计算黑色节点总数
        totalBlack = (int) colors.chars().filter(ch -> ch == 'B').count();
        maxBlack = 0;

        dfs(1, 0);
        System.out.println(maxBlack);
    }

    static int dfs(int node, int parent) {
        int blackCount = colors.charAt(node - 1) == 'B' ? 1 : 0;

        for (int child : tree.get(node)) {
            if (child != parent) {
                int childBlack = dfs(child, node);
                if (colors.charAt(node - 1) == 'R') {
                    // 如果当前节点是红色，考虑将其作为切割点
                    maxBlack = Math.max(maxBlack, Math.max(childBlack, totalBlack - childBlack));
                }
                blackCount += childBlack;
            }
        }

        return blackCount;
    }
}
